package org.example.cake.mapper;
import org.apache.ibatis.annotations.*;
import org.example.cake.entity.Ordercake;

import java.util.List;

@Mapper
public interface OrdercakeMapper {
    int deleteByPrimaryKey(Integer orderid);

    int insert(Ordercake record);

    int insertSelective(Ordercake record);

    Ordercake selectByPrimaryKey(Integer orderid);

    int updateByPrimaryKeySelective(Ordercake record);

    int updateByPrimaryKey(Ordercake record);

    /**
     * 根据用户id查询不同订单状态的订单信息
     * @param userid 用户id
     * @return 集合
     */
    public List<Ordercake> selectOrdercake(Integer userid);

    /**
     * 点击申请退款就修改退款的类型从0[未退款]改为1[退款中]
     * @param orderid 订单id
     * @return 收影响的行数
     */
    public int applyrefund(@Param("orderid") Integer orderid,@Param("userreason") String userreason);

    /**
     * 根据用户id查询他申请提交的订单
     * @param userid 用户id
     * @return 订单集合
     */
    public List<Ordercake> selectapplyfund(@Param("userid") Integer userid,
                                           @Param("userName") String userName,
                                           @Param("orderstatus") String orderstatus,
                                           @Param("ordernum") String ordernum);
    /**
     * 根据订单id修改退款状态
     * @Param("orderid") 订单id
     * @Param("refund") 退款状态
     * @return 收影响的行数
     */
    public int updateRefundsStatus(@Param("orderid") Integer orderid,@Param("refund") Integer refund);



    /**
     * 此方法用于评论新增成功后对订单的评价状态进行修改【未评价--》已评价】
     * @param orderid 订单id
     * @return 受影响的行数
     */
    public void updateOrderDiscussIf(@Param("orderid") Integer orderid,@Param("orderdiscussif") Integer orderdiscussif);

    /**
     * 新增订单
     * @Date 2025-08-04 谭丽那
     * @param ordercake
     * @return
     */
    @Insert("insert into ordercake(userid,ordernum,ordertime,orderprice,orderstatus,orderdiscussif,payid,orderecount) values(#{ordercake.userid},#{ordercake.ordernum},#{ordercake.ordertime},#{ordercake.orderprice},#{ordercake.orderstatus},#{ordercake.orderdiscussif},#{ordercake.payid},#{ordercake.orderecount})")
    Integer addcakeorder(@Param("ordercake") Ordercake ordercake);

    /**
     * 修改订单总数
     * @param count
     * @param payid
     * @return
     */
    @Update("update ordercake set orderecount=#{count}  where payid=#{payid} ")
    Integer updateordercount(@Param("count") Integer count, @Param("payid") int payid);
    /**
     * 获取今日订单总数
     * @return
     */
    @Select("select COUNT(*) from ordercake where ordertime= CURDATE()")
    Integer getTodayOrderCount();

    @Select("select COUNT(*) from ordercake where ordertime=#{lastSevenDay}")
    Integer getCount(@Param("lastSevenDay") String lastSevenDay);
    /**
     * 获取这个月的总数
     * @return
     */
    Integer getMonthOrderCount();

    /**
     * 获取日总金额
     * @return
     */
    @Select("select  SUM(orderprice) from ordercake where ordertime= CURDATE()")
    String gettodayMoney();

    /**
     * 获取当月总额
     * @return
     */
    @Select("select SUM(orderprice) from ordercake where  month(ordertime) = month(CURDATE());")
    String getmonthMoney();

    /**
     * 根据用户id查询他申请提交的订单小程序端
     * @param userid 用户id
     * @return 订单集合
     */
    public List<Ordercake> selectapplyfundFront(@Param("userid") Integer userid);

    /**
     * 商家不同意退款方法
     * @param shopreply 商家回复
     * @param orderid 订单id
     * @return 受影响的行数
     */
    public Integer refundReply(@Param("shopreply")  String shopreply,@Param("orderid") Integer orderid);

    /**
     * 查询今日的订单
     * @return 订单集合
     */
    public List<Ordercake> selectTodayOrder();

    /**
     * 用户确认收货
     * @param orderid  订单id
     * @return 受影响的行数
     */
    public int confirmGoods(@Param("orderid") Integer orderid);

    /**
     * 用户删除订单
     * @param orderid 订单id
     * @return 受影响的行数
     */
    public int deleteGoods(@Param("orderid") Integer orderid);

    /**
     * 接单
     * @param orderid 订单id
     * @return 受影响的行数
     */
    public int updateGoods(@Param("orderid") Integer orderid);

}